package com.example.demo.service;

import com.example.demo.domain.online.HouseInfoData;
import com.example.demo.entity.Online;

import java.util.List;

/**
 * 网签配置服务层接口
 *
 * @author 叮当猫的百宝箱
 * @since 1.0
 */
public interface OnlineService {

    /**
     * 添加新的网签配置
     *
     * @param online 待添加的网签配置信息
     */
    void createOnline(Online online);

    /**
     * 根据网签配置ID删除一个网签配置
     *
     * @param id 网签配置ID
     */
    void deleteOnlineById(Long id);

    /**
     * 获取全部网签配置列表
     *
     * @return 全部网签配置列表
     */
    List<Online> getAllOnline();


    /**
     * 根据网签配置ID获取网签配置信息
     *
     * @param id 网签配置ID
     * @return 网签配置信息
     */
    Online getOnlineById(Long id);

    /**
     * 根据网签配置ID更新网签配置信息
     *
     * @param id     网签配置ID
     * @param online 等待更新网签配置信息
     */
    void updateOnlineById(Long id, Online online);

    /**
     * 根据网签配置ID获取第三方房token信息
     *
     * @param id 网签配置ID
     * @return 网签平台token信息
     */
    String getOnlineTokenById(Long id);

    /**
     * 根据网签配置获取第三方房token信息
     *
     * @param online 网签配置信息
     * @return 网签平台token信息
     */
    String getOnlineTokenById(Online online);

    /**
     * 请求网签中心获取网签合同编码
     *
     * @param id                网签配置ID
     * @param projectId         网签项目ID
     * @param projectName       网签中心项目名称
     * @param contractAttribute 合同属性: 个人(01),单位(02),过渡期(03)
     * @return 合同编码
     */
    String getOnlineContractNo(Long id, String projectId, String projectName, String contractAttribute);


    /**
     * 根据身份证号获取网签准入资格证编码
     *
     * @param id     网签配置ID
     * @param cardNo 要查询的身份证号码
     * @return 准入资格证编码列表
     */
    List<String> getOnlineTransactionNoByCardNo(Long id, String cardNo);

    /**
     * 网签申请退租
     *
     * @param id          网签配置ID
     * @param projectId   网签项目ID
     * @param projectName 网签项目名称
     * @param houseId     网签房源ID
     * @param contractNo  网签合同编码
     * @param operator    操作人
     */
    void applyTermination(Long id, String projectId, String projectName, String houseId, String contractNo, String operator);


    /**
     * 网签确认退租
     *
     * @param id            网签配置ID
     * @param projectId     网签项目ID
     * @param projectName   网签项目名称
     * @param houseId       网签房源ID
     * @param contractNo    网签合同编码
     * @param operator      操作人
     * @param livingEndTime 实际退租时间
     * @param houseInfo     房屋信息
     */
    void confirmTermination(Long id, String projectId, String projectName, String houseId, String contractNo, String operator, String livingEndTime, HouseInfoData houseInfo);


    /**
     * 网签续租确认
     *
     * @param id          网签配置ID
     * @param projectId   网签项目ID
     * @param projectName 网签项目名称
     * @param houseId     网签房源ID
     * @param contractNo  老合同编码
     * @param operator    操作人
     */
    void confirmResignContract(Long id, String projectId, String projectName, String houseId, String contractNo, String operator);
}
